#pragma once

#include<string>
#include<vector>
#include "Scope.h"
#include "Scubserver.h"
#include "Tokenizer.h"
#include "Symbolyzer.h"

struct Scuba
{
public:
    std::vector<Scope*> m_apxScope;
    Scope*				m_pxCurrentScope;
    Scubserver*			m_pxScubserver;
	Symbolyzer*			m_pxSymbolyzer;

	int					m_nLineNumber;
	std::string			m_sFileName; //TODO: Or should it be SourceUnit?
    
    virtual void enterScope(Scope* inScope);
    virtual void exitScope(void);

public:
    void feed(Token& inToken);
    void print();
    void setObserver(Scubserver* inScubserver);
	void setFileName(std::string sFileName);
    Scuba(std::string sFileName="");
    ~Scuba(void);
};
